#include "mt.h"
#include "string.h"
#define STDOUT 1
#define STDERR 2
//tcp no delay Falta

int main()
{
	int sock,newsock;
	struct sockaddr_in name, cli_addr;
	char buf[MAX_MSG_LENGTH];
	/* Crear socket sobre el que se lee: dominio INET, protocolo TCP (STREAM). */
	sock = socket(AF_INET, SOCK_STREAM, 0);
	if (sock < 0) {
		perror("abriendo socket");
		exit(1);
	}
	/* Crear nombre, usamos INADDR_ANY para indicar que cualquiera puede enviar aquí. */
	name.sin_family = AF_INET;
	name.sin_addr.s_addr = INADDR_ANY;
	name.sin_port = htons(PORT);
	if (bind(sock, (void*) &name, sizeof(name))) {
		perror("binding datagram socket");
		exit(1);
	}
	
	listen(sock,MAX_CONEC);
	//si no dio error acepto la coneccion y creo un nuevo socket para ese cliente
	int addrlen = sizeof(cli_addr);
		newsock = accept(sock, (struct sockaddr *)&cli_addr,  &addrlen);
		if (newsock<0) {
				perror("Accept connection");
				exit(1);
		}
	//~ 
	dup2(newsock,STDOUT); //se redirecciona los sockets
	dup2(newsock,STDERR);
	
	/* Recibimos mensajes hasta que alguno sea el que marca el final. */
	for (;;) {
		
		int r = read(newsock, buf, MAX_MSG_LENGTH);
		buf[r] = '\0';
		if (strncmp(buf, END_STRING, MAX_MSG_LENGTH) == 0)
			break;
		printf("Comando: %s\n", buf);
		
		system(buf);
		fflush(stderr);
		fflush(stdout);

	}
	/* Cerrar socket de recepción. */
	close(newsock);
	close(sock);
	return 0;
}

/*
 * 
 * Encontre esto de socket no delay
 * int sock, flag, ret;



 // Create new stream socket 

sock = socket( AF_INET, SOCK_STREAM, 0 );
//Disable the Nagle (TCP No Delay) algorithm 

flag = 1;

ret = setsockopt( sock, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag) );



if (ret == -1) {

  printf("Couldn't setsockopt(TCP_NODELAY)\n");

  exit( EXIT_FAILURE );

}

 * 
 * 
 * 
 * */
